home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / Portable Patmos / usr / include / netinet / ip_mroute.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-08  |  5.9 KB  |  175 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1989 Stephen Deering.
  3.  * Copyright (c) 1992 Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * Stephen Deering of Stanford University.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  *    This product includes software developed by the University of
  20.  *    California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  *
  37.  *    @(#)ip_mroute.h    7.2 (Berkeley) 7/8/92
  38.  */
  39.  
  40. /*
  41.  * Definitions for the kernel part of DVMRP,
  42.  * a Distance-Vector Multicast Routing Protocol.
  43.  * (See RFC-1075.)
  44.  *
  45.  * Written by David Waitzman, BBN Labs, August 1988.
  46.  * Modified by Steve Deering, Stanford, February 1989.
  47.  *
  48.  * MROUTING 1.0
  49.  */
  50.  
  51.  
  52. /*
  53.  * DVMRP-specific setsockopt commands.
  54.  */
  55. #define    DVMRP_INIT    100
  56. #define    DVMRP_DONE    101
  57. #define    DVMRP_ADD_VIF    102
  58. #define    DVMRP_DEL_VIF    103
  59. #define    DVMRP_ADD_LGRP    104
  60. #define    DVMRP_DEL_LGRP    105
  61. #define    DVMRP_ADD_MRT    106
  62. #define    DVMRP_DEL_MRT    107
  63.  
  64.  
  65. /*
  66.  * Types and macros for handling bitmaps with one bit per virtual interface.
  67.  */
  68. #define    MAXVIFS 32
  69. typedef u_long vifbitmap_t;
  70. typedef u_short vifi_t;        /* type of a vif index */
  71.  
  72. #define    VIFM_SET(n, m)        ((m) |= (1 << (n)))
  73. #define    VIFM_CLR(n, m)        ((m) &= ~(1 << (n)))
  74. #define    VIFM_ISSET(n, m)    ((m) & (1 << (n)))
  75. #define    VIFM_CLRALL(m)        ((m) = 0x00000000)
  76. #define    VIFM_COPY(mfrom, mto)    ((mto) = (mfrom))
  77. #define    VIFM_SAME(m1, m2)    ((m1) == (m2))
  78.  
  79.  
  80. /*
  81.  * Agument structure for DVMRP_ADD_VIF.
  82.  * (DVMRP_DEL_VIF takes a single vifi_t argument.)
  83.  */
  84. struct vifctl {
  85.     vifi_t        vifc_vifi;            /* the index of the vif to be added */
  86.     u_char        vifc_flags;         /* VIFF_ flags defined below */
  87.     u_char        vifc_threshold;     /* min ttl required to forward on vif */
  88.     struct    in_addr vifc_lcl_addr;    /* local interface address */
  89.     struct    in_addr vifc_rmt_addr;    /* remote address (tunnels only) */
  90. };
  91.  
  92. #define    VIFF_TUNNEL    0x1        /* vif represents a tunnel end-point */
  93. #define VIFF_SRCRT    0x2        /* tunnel uses IP src routing */
  94.  
  95.  
  96. /*
  97.  * Argument structure for DVMRP_ADD_LGRP and DVMRP_DEL_LGRP.
  98.  */
  99. struct lgrplctl {
  100.     vifi_t    lgc_vifi;
  101.     struct    in_addr lgc_gaddr;
  102. };
  103.  
  104.  
  105. /*
  106.  * Argument structure for DVMRP_ADD_MRT.
  107.  * (DVMRP_DEL_MRT takes a single struct in_addr argument, containing origin.)
  108.  */
  109. struct mrtctl {
  110.     struct    in_addr mrtc_origin;    /* subnet origin of multicasts */
  111.     struct    in_addr mrtc_originmask; /* subnet mask for origin */
  112.     vifi_t    mrtc_parent;        /* incoming vif */
  113.     vifbitmap_t mrtc_children;    /* outgoing children vifs */
  114.     vifbitmap_t mrtc_leaves;    /* subset of outgoing children vifs */
  115. };
  116.  
  117.  
  118. #ifdef KERNEL
  119.  
  120. /*
  121.  * The kernel's virtual-interface structure.
  122.  */
  123. struct vif {
  124.     u_char    v_flags;        /* VIFF_ flags defined above */
  125.     u_char    v_threshold;        /* min ttl required to forward on vif */
  126.     struct    in_addr v_lcl_addr;    /* local interface address */
  127.     struct    in_addr v_rmt_addr;    /* remote address (tunnels only) */
  128.     struct    ifnet  *v_ifp;        /* pointer to interface */
  129.     struct    in_addr *v_lcl_grps;    /* list of local grps (phyints only) */
  130.     int    v_lcl_grps_max;        /* malloc'ed number of v_lcl_grps */
  131.     int    v_lcl_grps_n;        /* used number of v_lcl_grps */
  132.     u_long    v_cached_group;        /* last grp looked-up (phyints only) */
  133.     int    v_cached_result;    /* last look-up result (phyints only) */
  134. };
  135.  
  136. /*
  137.  * The kernel's multicast route structure.
  138.  */
  139. struct mrt {
  140.     struct    in_addr mrt_origin;    /* subnet origin of multicasts */
  141.     struct    in_addr mrt_originmask;    /* subnet mask for origin */
  142.     vifi_t    mrt_parent;            /* incoming vif */
  143.     vifbitmap_t mrt_children;    /* outgoing children vifs */
  144.     vifbitmap_t mrt_leaves;        /* subset of outgoing children vifs */
  145.     struct    mrt *mrt_next;        /* forward link */
  146. };
  147.  
  148.  
  149. #define    MRTHASHSIZ    256
  150. #if (MRTHASHSIZ & (MRTHASHSIZ - 1)) == 0      /* from sys:route.h */
  151. #define    MRTHASHMOD(h)    ((h) & (MRTHASHSIZ - 1))
  152. #else
  153. #define    MRTHASHMOD(h)    ((h) % MRTHASHSIZ)
  154. #endif
  155.  
  156. /*
  157.  * The kernel's multicast routing statistics.
  158.  */
  159. struct mrtstat {
  160.     u_long    mrts_mrt_lookups;    /* # multicast route lookups */
  161.     u_long    mrts_mrt_misses;    /* # multicast route cache misses */
  162.     u_long    mrts_grp_lookups;    /* # group address lookups */
  163.     u_long    mrts_grp_misses;    /* # group address cache misses */
  164.     u_long    mrts_no_route;        /* no route for packet's origin */
  165.     u_long    mrts_bad_tunnel;    /* malformed tunnel options */
  166.     u_long    mrts_cant_tunnel;    /* no room for tunnel options */
  167.     u_long    mrts_wrong_if;        /* arrived on wrong interface */
  168. };
  169.  
  170. int    ip_mrouter_cmd __P((int, struct socket *, struct mbuf *));
  171. int    ip_mrouter_done __P(());
  172.  
  173. #endif /* KERNEL */
  174.  
  175.